﻿/*******************************************************
* Copyright (c) 2018-2088, By XuXiang all rights reserved.
*
* FileName: CSVLoader.h
* Summary: CSV文件加载。
*
* Author: XuXiang
* Date: 2024-05-09 23:32
*******************************************************/

#ifndef __CSVLoader_h__
#define __CSVLoader_h__

#include <string>
#include <vector>
#include <map>
#include <queue>
using namespace std;

namespace Competition
{
	class CSVLoader
	{
	public:
		CSVLoader();
		~CSVLoader();

		//初始化
		void Init(const string& file);

		//读取下一条记录
		bool ReadNextRecord();

		//获取剩余记录数量
		inline int GetLastCount() { return (int)m_DataLines.size(); }

		//获取布尔值
		bool ReadBool(const string& field);

		//获取布尔数组
		void ReadBoolArray(const string& field, vector<bool> &v);

		//获取整数值
		int ReadInt(const string& field);

		//获取整数数组
		void ReadIntArray(const string& field, vector<int> &v);

		//获取小数值
		float ReadFloat(const string& field);

		//获取小数数组
		void ReadFloatArray(const string& field, vector<float> &v);

		//获取字符串值
		string ReadString(const string& field);

		//获取字符串数组
		void ReadStringArray(const string& field, vector<string> &v);

	private:

		//字段索引
		map<string, int> m_FieldIndex;

		//数据行
		queue<string> m_DataLines;

		//当前行的值
		vector<string> m_CurValues;
	};
}

#endif
